一.Servlet的概述与作用
1.Servlet概述
在前面说到了 Servlet, 今天就来细讲Servlet。
Servlet是运行在服务端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求,响应给浏览器的动态资源。
Servlet是JavaWeb三个组件之一(Servlet,Filter,Listener),最重要。
2.Servlet的作用
Servlet的作用:用来处理从客服端发送过来的请求,并对请求作出响应。
所以Servlet的任务就有:
1.获取请求数据
2.处理请求
3.完成响应
二.Servlet的实现
(1)Servlet规范要求:Servlet需要编写实现类,并且在web.xml中配置。
实现类:通常是继承javax.servlet.http.HttpServlet类,并复写doGet和doPost方法。
doGet()方法用于处理get请求。
doPost()方法用于处理post请求。一般我们编写doGet方法,然后doPost方法调用doGet方法。
(2)配置信息:在web.xml进行配置。
(3)代码实现
启动Tomcat执行
浏览器显示空白页面
三.Servlet的执行流程详解
如下图:
当浏览器输入url后先找配置文件web.xml中的url-pattern标签,然后找到后对应该name 找到servlet-name,从而找到Class文件的地址,最后进入该Servlet文件,执行doGet或doPost。
四.Servlet的生命周期(面试)
Servlet规范规定,所有的Servlet必须实现 javax.servlet.Servlet接口。
1.第一次调用时,将执行初始化方法:init(ServletConfig)
2.每一次调用时,都将执行service(ServletRequest,ServletResponse)方法
3.服务器关闭时,或者项目被移除,执行destroy()方法
JavaEE规范中提供了Servlet接口的实现类:
GenericServlet:通用servlet实现。没有实现service
HttpServlet:与Http协议有关的实现。实现servlet方法,完成与HTTP协议相关的操作。
request.getMethod() 获得请求的方式(get,post)
如果是get,将调用doGet()
如果是post,将调用doPost()
生命周期:就是一个对象从创建到销毁的过程,于是Servlet生命周期就是其从创建到销毁的过程。
*何时创建:用户第一次访问Servlet创建Servlet的实例(单实例)
*何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候。
用户第一次访问Servlet的时候,服务器就会创建一个Servlet实例,那么Servlet中的init方法就会执行
任何一次的请求服务器都会创建一个新线程访问Servlet中的service方法。在service方法内部根据请求的方式的不同调用doGet或者doPost及其他方法(get请求调用doGet,doPost请求调用doPost)。
当Servlet中的服务器移除掉,或者关闭服务器是,service的实例就会被销毁,那么也就是destory方法就会执行。
五.Servlet的相关配置
(1)启动时候创建:servlet在服务器启动的时候创建好,进行对servlet的配置。
在web.xml中在
传入的正整数number越小,则创建的优先级越高
(2)url-pattern的配置
必须以/开头,通常访问html页面时,首先从web项目的web.xml文件寻找匹配的路径,如果没有找到就再从默认的web.xml匹配,将使用缺省的servlet
(3)开发路径的编写
绝对路径:不需要找位置相对关系,以/开始的,分为客户端路径和服务端路径
*客户端路径一定要加工程名。/javaweb/servlet
*服务端路径不需要加工程名 /servlet
六.ServletContext & ServletConfig
1.ServletContext概述:服务器启动时,为每个WEB应用创建一个单独的ServletContext对象,我们可以使用这个对象存取数据,用这个对象存取数据可以在整个web应用中获得。
2.方法:
(1)向ServletContext中存数据,使用setAttribute方法 setAttribute(String name,Object object)
(2)从ServletContext中取数据,使用getAttribute方法 getAttribute(String name)返回值为Object
(3)从ServletContext中移除数据,使用removeAttribute(String name)
3.ServletContext()读取web工程下的文件:
ServletContext对象可以进行整个web项目的初始化数据重置,也可以获得项目的绝对路径,及指定的资源。
使用String RealPath = getRealPath(String path)获取绝对路径path为虚拟路径,应该是正斜线/开始,/表示跟目录(web)
使用InputStream inputstream = getResourceAsStream(String path)获取的是某个资源文件的InputStream输入流对象
4.代码演示:
先用getServletContext()获取一个对象
获得Properties对象进行加载load(in)流
最后使用pros.getProperty()来获取数据。
其中 FileInputStream(realPath);该输入流中的参数必须是绝对路径
五.ServletConfig概述
刚才讲了ServletContext是servlet上下文,整个web都可以使用,方便我们想另外一个动态页面传输数据。同理servletconfig,则是获取每一个Servlet配置信息的工具,它有多个不像ServletContext。